【小ネタ】AWS/ECS名前空間のMemoryUtilizationメトリクスとECS/ContainerInsights名前空間のMemoryUtilizedメトリクスは単位が違う
Amazon ECSでメモリ関連のメトリクスを取りたい
Amazon ECS(以下、ECS)のコンテナ群を監視する際は、Amazon CloudWatch(以下、CloudWatch)メトリクスを参照することが多いです。この際、参照するメトリクスによっては、メモリ使用率とメモリ使用量を間違える可能性がある(筆者は間違えてました)ので、今回紹介します。
ざっくり要約
AWS/ECS
名前空間のMemoryUtilization
メトリクスと、ECS/ContainerInsights
名前空間のMemoryUtilized
メトリクスとでは、単位が違うAWS/ECS
名前空間のMemoryUtilization
メトリクス:%ECS/ContainerInsights
名前空間のMemoryUtilized
メトリクス:MB
解説
ECSのメトリクスを取得する場合は、ECS標準で取得できるメトリクスと、Container Insightsで取得できるメトリクスがあります。ECS標準のメトリクスはAWS/ECS
名前空間で、Container InsightsメトリクスはECS/ContainerInsights
名前空間で取得できます。
これら2つのメトリクスでは、どちらもメモリ関連のメトリクスを取得することができます。しかし、ECS標準メトリクスではメモリ使用率を、ContainerInsightsメトリクスではメモリ使用量を取得するという違いがあります。
以下、ECS標準メトリクスより
MemoryUtilization
クラスターまたはサービスで使用されているメモリの割合。(中略)
単位: パーセント。
こちらはContainer Insightsメトリクスより
MemoryUtilized
使用しているディメンションセットによって指定されるリソースのタスクにより使用されているメモリ。(中略)
単位: メガバイト
注意するべきシチュエーションと対策
上記の通りMemoryUtilization
とMemoryUtilized
で字面が似ています。そのため、メモリ使用率を取得するために設定したメトリクスが誤ってMemoryUtilized
になっているケースなどが想定されます。
これにより、もともと取得したい値が取れていないことになり、想定した監視ができなくなる可能性が高いです。
具体的にいうと、例えばCloudWatchアラームの閾値を設定する場合、メモリ使用率とメモリ使用量では絶対値が異なります。ですので、間違ったメトリクスを設定したためにアラームが発出されない・または頻繁に意図せぬアラームが発出されてしまう恐れもあります。
ですので、メトリクスを設定する際は単位に気をつけて、本当に意図した値が取れているのか確認するようにしましょう。
メトリクスの単位には気をつけよう
タイトルで【小ネタ】と表現したように、要は「メトリクスの設定ミスに気をつけようね」という内容なのですが、仮にメトリクスを間違えた場合は運用に大きな影響を及ぼすことが考えられます。
しっかり確認していないと意外とミスしそうな内容でしたので、この記事を読んだ方はいちどCloudWatchメトリクスの種類や単位をしっかり確認して、意図した設定になっているか確認してみましょう。では!